JavaScript একটি ইভেন্ট-ড্রিভেন এবং অ্যাসিনক্রোনাস প্রোগ্রামিং ভাষা। এর মানে হল যে, JavaScript একাধিক কাজ একসাথে করতে সক্ষম (যেমন ডেটাবেস থেকে তথ্য আনা, ফাইল পড়া, বা API কল করা) এবং এটি **অ্যাসিনক্রোনাস (Asynchronous)**ভাবে কাজ করে, যার মাধ্যমে কোডের অন্যান্য অংশ একে অপরকে ব্লক না করে কার্যকরীভাবে চালানো যায়।
এই অ্যাসিনক্রোনাস কার্যক্রমগুলো সাধারণত তিনটি প্রধান কৌশল দ্বারা পরিচালিত হয়:
এখানে আমরা প্রতিটি কৌশল সম্পর্কে বিস্তারিতভাবে আলোচনা করব।
Callback হল একটি ফাংশন যা অন্য একটি ফাংশনের প্যারামিটার হিসেবে পাস করা হয় এবং মূল ফাংশনটির কার্যক্রম শেষ হওয়ার পর সেটি কল (বা ট্রিগার) করা হয়। JavaScript এ অ্যাসিনক্রোনাস ফাংশনের জন্য callback ব্যবহার করা হয়, যেমন ফাইল পড়া, নেটওয়ার্ক কল করা বা টাইমআউট ব্যবস্থাপনা।
// একটি সিম্পল callback ফাংশন
function fetchData(callback) {
setTimeout(() => {
const data = "Data fetched";
callback(data); // Callback ফাংশন কল করা
}, 2000);
}
function processData(data) {
console.log("Processing: " + data);
}
fetchData(processData); // Callback ফাংশন পাস করা
এখানে fetchData
ফাংশনটি একটি ডেটা ফেরত দেয়, এবং যখন সেটি ফেরত আসে, তখন processData
callback ফাংশনটি ট্রিগার হয়।
Callbacks সাধারণত Callback Hell তৈরি করতে পারে, যেখানে একাধিক কলব্যাক ফাংশন একে অপরের মধ্যে nest হয়ে যায়, এবং কোড আরও জটিল হয়ে যায়।
Promise হল একটি JavaScript অবজেক্ট যা ভবিষ্যতে একটি অ্যাসিনক্রোনাস অপারেশনের ফলাফল বা ত্রুটি উপস্থাপন করে। এটি অ্যাসিনক্রোনাস কাজের জন্য একটি পরিষ্কার এবং পরিচালনাযোগ্য পদ্ধতি প্রদান করে। Promise একটি অবজেক্ট হতে পারে যা fulfilled
(সফল), rejected
(ব্যর্থ), বা pending
(অপেক্ষমাণ) অবস্থায় থাকে।
// Promise ব্যবহার
function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
const data = "Data fetched";
resolve(data); // Promise সফল হলে
}, 2000);
});
}
fetchData().then(data => {
console.log("Processing: " + data);
}).catch(error => {
console.log("Error: " + error);
});
এখানে, fetchData
একটি Promise ফেরত দেয়। যখন এটি সফলভাবে কাজ সম্পন্ন করে, তখন .then()
ব্লকটি কল হয়, এবং যদি কোনো ত্রুটি ঘটে তবে .catch()
ব্লকটি কল হয়।
.all()
, .race()
ইত্যাদি ব্যবহার করা যায়।Async/Await হল ES2017 (ES8) তে পরিচিত একটি সিনট্যাক্স যা Promises ব্যবহারের উপর ভিত্তি করে কাজ করে, তবে এটি আরও সরল এবং সিনক্রোনাস কোডের মতো দেখতে হয়। async
ফাংশনটি একটি Promise ফেরত দেয় এবং await
কিওয়ার্ডটি Promise এর ফলাফল পাওয়ার জন্য অপেক্ষা করে।
// Async/Await ব্যবহার
async function fetchData() {
const data = await new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Data fetched");
}, 2000);
});
console.log("Processing: " + data);
}
fetchData();
এখানে, fetchData
একটি async
ফাংশন, এবং await
এর মাধ্যমে Promise এর ফলাফল আসা পর্যন্ত কোড অপেক্ষা করে, যা সিনক্রোনাস কোডের মতো মনে হয়, তবে আসলে এটি অ্যাসিনক্রোনাস।
বৈশিষ্ট্য | Callbacks | Promises | Async/Await |
---|---|---|---|
অ্যাসিনক্রোনাস প্রোগ্রামিং | হ্যাঁ, তবে callback hell তৈরি হতে পারে | হ্যাঁ, তবে chaining এর মাধ্যমে কাজ করা যায় | হ্যাঁ, সহজ এবং পরিষ্কারভাবে ব্যবহার করা যায় |
প্রবাহ নিয়ন্ত্রণ | Nested, জটিল হতে পারে | .then() এবং .catch() এর মাধ্যমে পরিচালিত | await ব্যবহার করে সাধারণ সিনক্রোনাস কোডের মতো পরিচালিত |
কোডের জটিলতা | জটিল, code structure পরিষ্কার নয় | মাঝামাঝি, তবে .then() এবং .catch() এর মাধ্যমে পরিষ্কার হয় | পরিষ্কার, সিনক্রোনাস কোডের মতো |
ফলাফল | সরাসরি ফেরত দেয় না | Promise (fulfilled বা rejected) ফেরত দেয় | Promise ফেরত দেয়, তবে await দ্বারা ফলাফল পাওয়া যায় |
সহজতা | বেশি জটিল এবং অভ্যস্ত হতে পারে | তুলনামূলক সহজ, তবে chaining হয় | সবচেয়ে সহজ, সিনক্রোনাস কোডের মতো |
.then()
, .catch()
ব্যবহার করে ফলাফল বা ত্রুটি পরিচালনা করা যায়।Async/Await সাধারণত সবচেয়ে ভালো পদ্ধতি হিসাবে বিবেচিত হয় কারণ এটি কোড লেখার সময় সর্বাধিক সহজ এবং পরিষ্কার।
Read more